#include <iostream>
#include <exception>  //exception类的头文件
using namespace std;
/*
	throw抛出自定义的异常类型
*/

//定义子类继承exception
class Myerror:public exception
{
public:
	//重写父类的同名虚函数what
	//const char* what() const throw()  //throw()表示该函数没有使用throw抛出任何异常类型
	const char* what() const noexcept   //C++11新增用来替换throw()
	{
		//自由发挥，发生错误，你先干什么，你就写什么
		cout<<"函数调用失败了，抛出了自定义的异常"<<endl;
		return "函数出错了";
	}
};
int otherfun(int n)
{
	//创建自定义的异常类对象
	Myerror err;
	if(n>=10 && n<=100)  //成功
		return 0;
	else if(n>100)//失败
		throw err; //抛出自定义异常类型
	else
		throw 55.5; //抛出浮点型异常
}

int main()
{
	try
	{
		otherfun(166); 
	}catch(double n)  //专门负责捕捉浮点型异常
	{
		cout<<"otherfun调用失败,抛出了浮点型异常，参数n的值是: "<<n<<endl;
		return -1;
	}catch(Myerror n)  //专门负责捕捉Myerror异常
	{
		cout<<"otherfun调用失败,抛出了Myerror的类对象"<<endl;
		//类对象n调用成员函数what
		n.what();
		return -1;
	}
	
	cout<<"otherfun调用成功了，主程序继续往后执行"<<endl;
	return 0;
}